#include <iostream>
#include <vector>

class Node {
public:
    int val;
    std::vector<Node*> children;

    Node() {}

    Node(int _val) {
        val = _val;
    }

    Node(int _val, std::vector<Node*> _children) {
        val = _val;
        children = _children;
    }
};

// 前序遍历
void preOrder(Node *root) {
    // 最小子问题
    if (root == nullptr) return;
    // 遍历打印根节点
    std::cout << root->val << std::endl;

    for (Node *node : root->children) {
        preOrder(node);
    }
}

// 后序遍历
void postOrder(Node *root) {
    // 最小子问题
    if (root == nullptr) return;
    for (Node *node : root->children) {
        preOrder(node);
    }
    // 遍历打印根节点
    std::cout << root->val << std::endl;
}